package it.unina.uninachi;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.DialogInterface.OnClickListener;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.support.v4.app.NavUtils;

public class InserisciIP extends Activity {
	
	protected Button bottoneConnetti;
	private InserisciIP classe = this;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_inserisci_ip);
				
	}
	
	
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		//nessun menu
		return true;
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		switch (item.getItemId()) {
		case android.R.id.home:
			NavUtils.navigateUpFromSameTask(this);
			return true;
		}
		return super.onOptionsItemSelected(item);
	}
	
	public void connetti(View view){
		
		 bottoneConnetti = (Button) findViewById(R.id.connettiAlServer); 
	     bottoneConnetti.setEnabled(false);
	     
	     TextView istruzioni = (TextView) findViewById(R.id.textIstruzioni);
	     istruzioni.setText(getString(R.string.istruzioniConnessione));
	      
	     EditText indirizzoText = (EditText) findViewById(R.id.indirizzoIP);
	     String indirizzo = indirizzoText.getText().toString();
	     indirizzoText.setText(indirizzo);
	     
	     if (test(indirizzo)) {     //indirizzo ip valido      
             Handler handler = new MyHandler();
             ClientThread t = new ClientThread(handler,indirizzo);
             t.start();
              
	    } else { //indirizzo ip non valido! errore
	    	
			final AlertDialog.Builder builder=new AlertDialog.Builder(classe);
			builder.setTitle(getString(R.string.invalidIp));
			builder.setMessage(getString(R.string.checkYourIp));
			builder.setIcon(android.R.drawable.ic_dialog_alert);
			builder.setPositiveButton("OK", new OnClickListener() {
					@Override
					public void onClick(DialogInterface dialog, int which) {}
			});
			builder.show();
			bottoneConnetti.setEnabled(true);
	    	
	    }
		
	}
	//funzione di validazione dell'indirizzo IP
	public static boolean test(String ip) { 
        boolean valida = true; 
        String [] campi = ip.split("[.]"); 
        //4 campi, non localhost, separati da 0, minori di 255 e maggiori di 0
        if ((ip.equals("127.0.0.1")) || (campi.length != 4)) { 
             valida = false; 
        } 
        else { 
             try { 
                  for (int i = 0; i < campi.length; i++) { 
                       if ((Integer.parseInt(campi[i]) > 255) || (Integer.parseInt(campi[i]) < 0)) { 
                            valida = false; 
                       } 
                  } 
             } 
             catch (NumberFormatException e) { 
                  valida = false; 
             } 
        } 
        return valida; 
   }

	 private class MyHandler extends Handler {
		    @Override
		    public void handleMessage(Message msg) {
		      Bundle bundle = msg.getData();
		      if (bundle.getString("socket").equals("OK")){
		    	  // socket attiva
		    	  	bottoneConnetti.setEnabled(true);
		    	  	Choose.turnomio=false;
					Intent intent = new Intent(classe,Choose.class);
				    startActivity(intent);
		    	  
		      } else if (bundle.getString("socket").equals("KO")){
		    	  // socket non attiva. visualizzo un errore 
				final AlertDialog.Builder builder=new AlertDialog.Builder(classe);
				builder.setTitle(getString(R.string.error));
				builder.setMessage(getString(R.string.noConnectionEstabilished));
				builder.setIcon(android.R.drawable.ic_dialog_alert);

				builder.setPositiveButton("OK", new OnClickListener() {
						@Override
						public void onClick(DialogInterface dialog, int which) {}
				});
				builder.show();
	    	  	bottoneConnetti.setEnabled(true); //abilito il pulsante
		      }
		 }
	 }
}
